#include "PortManager.h"
#include "BasePort.h"
#include "Connection.h"
#include <QDebug>

PortManager::PortManager(QObject *parent)
    : QObject(parent)
{
}

PortManager::~PortManager()
{
    // 清理所有连接
    qDeleteAll(m_connections);
}

Connection* PortManager::connectPorts(BasePort* startPort, BasePort* endPort)
{
    // 检查参数有效性
    if (!startPort || !endPort) {
        qDebug() << "无效的端口参数";
        return nullptr;
    }
    
    // 检查是否已经存在连接
    if (getConnection(startPort, endPort)) {
        qDebug() << "端口间已存在连接";
        return nullptr;
    }
    
    // 检查端口类型是否匹配（输出端口连接到输入端口）
    if (startPort->getType() != PortType::Output || endPort->getType() != PortType::Input) {
        qDebug() << "端口类型不匹配：只能从输出端口连接到输入端口";
        return nullptr;
    }
    
    // 创建连接
    Connection* connection = new Connection(startPort, endPort);
    
    // 添加到连接列表
    m_connections.append(connection);
    
    return connection;
}

void PortManager::disconnectPorts(BasePort* startPort, BasePort* endPort)
{
    // 查找并移除连接
    Connection* connection = getConnection(startPort, endPort);
    if (connection) {
        removeConnection(connection);
    }
}

void PortManager::removeConnection(Connection* connection)
{
    if (!connection) return;
    
    // 从列表中移除
    m_connections.removeAll(connection);
    
    // 删除连接对象
    delete connection;
}

Connection* PortManager::getConnection(BasePort* startPort, BasePort* endPort) const
{
    // 查找指定端口间的连接
    for (Connection* connection : m_connections) {
        if (connection->getStartPort() == startPort && connection->getEndPort() == endPort) {
            return connection;
        }
    }
    
    return nullptr;
}

void PortManager::transmitAllData()
{
    // 传输所有连接中的数据
    for (Connection* connection : m_connections) {
        connection->transmitData();
    }
}